/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.servico;

import br.com.foxinline.modelo.Equipe;
import br.com.foxinline.modelo.Profissional;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author ely
 */
@Stateless
public class EquipeServico extends ServicoGenerico<Equipe> {

    public EquipeServico() {
        super(Equipe.class);
    }

    public List<Equipe> findEquipe(Equipe equipe) {
        String sql = "select e from Equipe e ";

        sql += " WHERE ";

        if (equipe.getNome() != null && !equipe.getNome().equals("")) {
            sql += " lower(e.nome) like lower(:nome) and ";
        }

        if (equipe.getCodigo() != null && !equipe.getCodigo().equals("")) {
            sql += " lower(e.codigo) like lower(:codigo) and ";
        }


        sql += " 1=1 Order by e.nome ASC";
        System.out.println(sql);

        Query query = getEntityManager().createQuery(sql);

        if (equipe.getNome() != null && !equipe.getNome().equals("")) {
            query.setParameter("nome", "%" + equipe.getNome() + "%");
        }

        if (equipe.getCodigo() != null && !equipe.getCodigo().equals("")) {
            query.setParameter("codigo", equipe.getCodigo());
        }


        return query.getResultList();
    }

    public List<Equipe> pesquisarEquipe(Equipe equipe, Profissional profissional) {
        String sql = "select e from Equipe e ";

        if (profissional != null) {
            if (profissional.getNome() != null && !profissional.getNome().equals("")
                    || profissional.getCpf() != null && !profissional.getCpf().equals("")
                    || profissional.getNumeroCartaoSus() != null && !profissional.getNumeroCartaoSus().equals("")) {
                sql += " JOIN e.profissionais p ";
            }
        }

        sql += " WHERE ";

        if (profissional != null) {

            if (profissional.getNome() != null && !profissional.getNome().equals("")) {
                sql += " lower(p.nomeProfissional) like lower(:nome) and ";
            }

            if (profissional.getCpf() != null && !profissional.getCpf().equals("")) {
                sql += " lower(p.cpf) like lower(:cpf) and ";
            }
            if (profissional.getNumeroCartaoSus() != null && !profissional.getNumeroCartaoSus().equals("")) {
                sql += " lower(p.numeroCartaoSus) like lower(:numSus) and ";
            }
        }

        if (equipe.getNome() != null && !equipe.getNome().equals("")) {
            sql += " lower(e.nome) like lower(:nome) and ";
        }

        if (equipe.getCodigo() != null && !equipe.getCodigo().equals("")) {
            sql += " lower(e.codigo) like lower(:codigo) and ";
        }

        sql += " 1=1 AND e.ativo = true Order by e.nome ASC";
        System.out.println(sql);

        Query query = getEntityManager().createQuery(sql);

        if (equipe.getNome() != null && !equipe.getNome().equals("")) {
            query.setParameter("nome", "%" + equipe.getNome() + "%");
        }

        if (equipe.getCodigo() != null && !equipe.getCodigo().equals("")) {
            query.setParameter("codigo", equipe.getCodigo());
        }

        if (profissional != null) {

            if (profissional.getNome() != null && !profissional.getNome().equals("")) {
                 query.setParameter("nomeProfissional", profissional.getNome());
            }

            if (profissional.getCpf() != null && !profissional.getCpf().equals("")) {
                query.setParameter("cpf", profissional.getCpf());
            }
            if (profissional.getNumeroCartaoSus() != null && !profissional.getNumeroCartaoSus().equals("")) {
                query.setParameter("numeroCartaoSus", profissional.getNumeroCartaoSus());
            }
        }

        return query.getResultList();
    }
}
